/* 
 * File:   Class.hpp
 * Author: Saul
 *
 * Created on 20 de abril de 2012, 03:51 PM
 */

#ifndef CLASS_HPP
#define	CLASS_HPP



#include <cstdlib>
#include <iostream>

using namespace std;

class Elements {
  //Modificador de acceso: private, protected, public  
  //Zona de atributos de la clase
  protected:
        
    string image;
    int    posX;
    int    posY;
    int    life;
    int    damage;
    //modificacion
    //string name;
  //Zona de métodos de la clase  
  public:  
    //Métodos constructores
    Elements();
    Elements(string image,int posX,int posY,int life,int damage);
    
    //Métodos de la clase
      //void   showData();// no es necesario para un juego mostrar los datos en consola
      string getImage();
      int    getPosX();
      int    getPosY();
      int    getLife();
      int    getDamage();
      
      void   setImage(string );
      void   setPosX(int);
      void   setPosY(int);
      void   setLife(int);
      void   setDamage(int);
      virtual void showData();
          
      //modificaciones
      //string getName();
      //void setName(string);
};

class Plane : public Elements{
 protected:
     int gunType;
     int gunLevel;
     
 public:
     Plane();
     Plane(int gunType,int gunLevel, string image, int posX, int posY, int life,int damage);
     
     int getGunType();
     int getGunLevel();
     void setGunType(int);
     void setGunLevel(int);
     void showData();
};



class Enemy : public Elements{
protected: 
    
    int gun; //Variable definida para arma
    int givenPoints; //Variable definida para puntaje
    int journey; //Variable definida para trayectoria

public:
    Enemy();
    Enemy(int gun, int givenPoints, int journey, string image, 
    int posX, int posY, int life,int damage);
    
    
    int getGun();
    int getGivenPoints();
    int getJourney();
    void setGun (int);
    void setGivenPoints (int);
    void setJourney (int);
    void showData();
            
};

class Items : public Elements{
    
 protected:
     int gift;
     
 public:
     Items();
     Items(int gift, string image, int posX, int posY, int life,int damage);
     
     int getGift();
     void setGift(int);
     void showData();
};

class Boss : public Enemy{
protected:
    int secondGun;
    
public:
    Boss();
    Boss(int secondGun, int gun, int score, int journey, string image, int posX, int posY, int life,int damage);
    
    int getSecondGun ();
    void setSecondGun (int);
    void showData();
};   

class World{
private:
    string backGround; // si es el fondo del juego no es un atributo
    int shape;
    int score;
    int count;
    int totalLife;
    Elements* members[1000];
    
public:
    World();
    //World(string backGround, int shape, int score, int totalLife);
    
    string getBackGround();
    int getShape();
    int getScore();
    int getTotalLife();
    
    void setBackGround(string);
    void setShape(int);
    void setScore(int);
    void setTotalLife(int);
    void addElements(Elements* e);
    Elements* foundElements(int life);
    void showData();
    void eliminateElements(int life);
};

class Player{
protected:
    string name;
    int totalScore;//peude ser igual nombre?
    
public:
    Player();
    Player(string name, int totalScore);
    string getName();
    int getTotalScore();
    void setName(string);
    void setTotalScore(int);    
};
// se crea una nueva funcion para ingresar y mostrar elementos como parte de un menu inicio
//class menuInicio{
//public:
  //  menuInicio();
    //void addElement();
    //void showData();
    //void addEnemy();
//};


#endif	/* CLASS_HPP */

